home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / misc / verbasef.sty < prev    next >
Text File  |  1995-03-09  |  13KB  |  340 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. % verbasef.sty
  3. %
  4. % This stands for VERBatim Automatic Splitting of External Files.
  5. %
  6. % Copyright (c) 1994 by Paul A. Thompson, All Rights Reserved.
  7. % Copy freely as per the GNU Copyleft.
  8. %
  9. % Requires:
  10. %   The New Font Selection Scheme (NFSS) as implemented in LaTeX2e
  11. %   VERBATIM.STY  :::  Rainer Schoepf
  12. %   VRBEXIN.STY   :::  You 
  13. %                      However, it is based on vrbinput.sty, a style by 
  14. %                      Bernd Raichle which must be revised as discussed below
  15. %                      in the section labeled IMPORTANT
  16. %   HERE.STY      :::  David Carlisle
  17. %
  18. % verbasef allows you to input (subsections of a) file, print them in
  19. % verbatim mode, while automatically breaking up the inputted lines into
  20. % pieces of a given length, which are output as figures.  These figures are
  21. % posted using the [H] specification, which forces LaTeX to place the figure
  22. % at the spot of invocation, rather than floating the figures to the top of
  23. % the next page.
  24. % Options for the verbasef specification include:
  25. %  o numbering of input lines
  26. %  o differential number of lines for the first page
  27. %  o specification of the font for the verbatim output
  28. %  o specification of the font for the optional line numbering
  29. %  o specification of line numbers as labels 
  30. %    To use the labelling feature, non-standard approaches must be used.
  31. %    A line number will be inserted into the main .aux file with label foo,
  32. %    if the specification 
  33. %   
  34. %    Vzzlabel|foo|
  35. %
  36. %    is inserted AFTER the line which is to be indicated.  Thus, if we have 
  37. %    a file with the following
  38. %    
  39. %    a line
  40. %    b line
  41. %    Vzzlabel|fooa|
  42. %    c line
  43. %    Vzzlabel|foob|
  44. %    d line
  45. %    Vzzlabel|fooc|
  46. %    e line
  47. %    f line
  48. %    Vzzlabel|food|
  49. %    these lines will be found in the .aux file.
  50. %    \newlabel{fooa}{{2}{1}}
  51. %    \newlabel{foob}{{3}{1}}
  52. %    \newlabel{fooc}{{4}{1}}
  53. %    \newlabel{food}{{6}{1}}
  54. %
  55. %    They can be used as any other label, for instance 
  56. %
  57. %    Using the labeling feature, pay attention to Line \ref{food} (found on
  58. %    Page \pageref{food}) to understand this radically new method.
  59. %
  60. %    Any lines with the Vzzlabel specification will be ignored in the 
  61. %    line counts.
  62. %
  63. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  64. %
  65. % USING THE styLE 
  66. %
  67. % verbasef is an adaptation of VRBSUBFILE, from Norman Walsh.  
  68. % I fully acknowledge Mr./Dr. Walsh as the imprimature of the code ensconced
  69. % herein, but have included other features as indicated above.
  70. %
  71. % Comments and suggestions always welcome.
  72. %   Paul A. Thompson
  73. %   Department of Psychiatry, Data Analysis and Statistics Section
  74. %   Case Western Reserve University
  75. %   Cleveland, OH    44106
  76. %
  77. %   AudioNet: (216) 844-8946
  78. %   InterNet: pat@po.cwru.edu
  79. %
  80. % User interface:
  81. %   VautoSubF[#1]#2#3#4#5#6
  82. %     Input lines #2 to #3 of file #4.  If present, #1 indicates which lines
  83. %     should be numbered.  For example, if #1 is 5, lines 5, 10, 15, etc.
  84. %     will be numbered.  By default, lines are not numbered at all.
  85. %     #5 is figure caption, and #6 is figure label.
  86. %
  87. %   VautoSfFont[#1]#2
  88. %     Use font #2 for verbatim input lines and, if present, use font #1 for
  89. %     line numbers.  By default, #2 is \tt and #1 is \rm\tiny.
  90. %   
  91. %   VautoPl#1
  92. %     Placement of the figure (either H or some other placement character)
  93. %     By default, placement is H (immediate here, here.sty) 
  94. %     (This currently does not function.  All placement is done using the 
  95. %     H specification.)
  96. %
  97. %   VautoLines[#1]{#2}
  98. %     #2 is number of lines per page.  If #1 is included, it is the number of
  99. %     lines for the first page.  If not, #1=#2
  100. %
  101. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  102. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  103. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  104. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  105. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  106. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  107. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  108. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  109. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  110. %
  111. % In order to use the verbasef.sty file, VRBINPUT.STY must be MODIFIED
  112. % and given a NEW NAME.  Here are instructions for modification:
  113. %
  114. % You must do EITHER 1-4 below OR 5 below to get verbasef to run properly.
  115. %
  116. % 1. Obtain vrbinput.sty from the standard distribution channels.  The file 
  117. %    should have the following characteristics:
  118. %
  119. %    \fileversion{v1.0b}
  120. %    \filedate{91/06/30}
  121. %    \docdate{91/08/05}
  122. %
  123. % 2. Copy vrbinput.sty to a file vrbexin.sty.  THIS MUST BE DONE PRIOR TO
  124. %    EDITING ANY FILE.
  125. % 3. Edit the file vrbexin.sty.  Please don't edit the file vrbinput.sty.
  126. %    Change Line 90 from 
  127. %    \verbatim@startline 
  128. %    to 
  129. %    \verbatim@start 
  130. %    as shown in the fragment of code from Lines 89-92 below.
  131. %
  132. %  \def\verbatim@readfile#1{%
  133. %     \verbatim@start
  134. %     \openin\verbatim@in@stream #1\relax
  135. %     \ifeof\verbatim@in@stream
  136. %
  137. %
  138. % 4. VERY IMPORTANT.  CHANGE ALL OCCURRANCES of vrbinput, in titles, typeout
  139. %    sections and credits to vrbexin.  Remove all references to the original
  140. %    author, Bernd Raichle, as he is not the author of the style file vrbexin.
  141. %    You may substitute my name for Mr. Raichle if you wish.
  142. %
  143. % 5. Obtain vrbexin.sty directly from the same subdirectory that verbasef was
  144. %    found in.
  145. %
  146. % 6. Place this .sty file in a place searched by TeX, on the TEXINPUT path.
  147. %
  148. % After I can figure out the docstrip utility, I will do this stuff myself.
  149. %
  150. % Note: As is standard practice in the TeX community, any modifications in 
  151. % .sty files must be given new names.  Thus, it is certainly vitally important
  152. % that the modifications in vrbinput.sty be done in the file named
  153. % vrbexin.sty, not in the original which I did not write.
  154. %
  155. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  156. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  157. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  158. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  159. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  160. % IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT    IMPORTANT
  161. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  162. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  163. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  164. %
  165. %
  166. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  167. \NeedsTeXFormat{LaTeX2e}%                                        
  168. \RequirePackage{vrbexin}%
  169. \RequirePackage{verbatim}%
  170. \RequirePackage{here}%
  171. \def\fileversion{v1.1}%
  172. \def\filedate{95/01/20}%
  173. \typeout{Style-Option: `verbasef' \fileversion \space <\filedate>  (ndw)}%
  174. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  175. %
  176. \newcounter{g@nu}
  177. \newcommand{\incr@macv}[2]{
  178. \setcounter{g@nu}{#1}\addtocounter{g@nu}{#2}%
  179. \global\edef#1{\theg@nu}%
  180. }
  181. \gdef\Vauto@LinePage{0}%      % lines/page counter
  182. \gdef\Vauto@NP{0}%            % Number of pages
  183. \gdef\Vauto@Fignum{0}%        % Figure number - retain over figures
  184. \gdef\Vauto@Pagea{0}%         % # lines page 1
  185. \gdef\Vauto@LineNo{0}%        % current line number
  186. \gdef\Vauto@LineMod{0}%       % modulo to print on
  187. \gdef\Vauto@LineLoop{0}%      % loop count in line number (1..Mod)
  188. \gdef\Vauto@LineStart{0}%     % first line to print
  189. \gdef\Vauto@LineCount{0}%     % number of lines to print
  190. \gdef\Vauto@NotLabel{0}%      % Printable - not a label
  191. \gdef\Vauto@PFlag{0}%         % print this line?
  192. %
  193. %%%% Default table placement, and macros to change table placement
  194. \def\Vauto@Plx{H}\def\Vauto@Pl#1{\def\Vauto@Plx{#1}}\def\VautoPl{\Vauto@Pl}%
  195. %%%% Default verbatim font and verbatim line number font
  196. \def\Vauto@sfFont{\tt}\def\Vauto@sfLNF{\rm\tiny}%
  197. %
  198. %%%% Macros to change fonts
  199. \def\Vauto@sbf[#1]#2{\def\Vauto@sfFont{#2}\def\Vauto@sfLNF{#1}}%
  200. \def\Vauto@svf#1{\def\Vauto@sfFont{#1}}%
  201. \def\VautoSfFont{%
  202.   \@ifnextchar[{\Vauto@sbf}{\Vauto@svf}%]    % This is for bracket match 
  203. }%                                           % ] has no effect on code     
  204. %%%% Macros to set number of lines per figure
  205. \def\Vauto@LPP{46}\def\Vauto@LPPa{46}%
  206. \def\Vauto@TwoLPP[#1]#2{\def\Vauto@LPP{#2}\def\Vauto@LPPa{#1}}%
  207. \def\Vauto@OneLPP#1{\def\Vauto@LPP{#1}\def\Vauto@LPPa{#1}}%
  208. \def\VautoLines{%
  209.   \@ifnextchar[{\Vauto@TwoLPP}{\Vauto@OneLPP}%] % Bracket match
  210. }%
  211. \def\VautoSubFF{\@ifnextchar[{\Vauto@sbf}{\Vauto@svf}%]
  212. }%
  213. \def\xxparse Vzzlabel|#1|{%
  214. \immediate\write\@mainaux{\string\newlabel{#1}{{\Vauto@LineNo}{\thepage}}}%
  215. }%
  216. \def\ifsubstr#1#2#3#4%% #1=string #2=substring, #3=yes, #4=no 
  217. {%
  218.   \def\tempa##1#2##2\over_##3\end{%
  219.   \ifx##3%                                      % can't parse
  220.   \gdef\Vauto@NotLabel{1}%
  221.   \else% can parse
  222.   \gdef\Vauto@NotLabel{0}%
  223.   \xxparse #1%
  224.   \fi%
  225. }%
  226. \tempa#1\over_\over#2\over___\end%
  227. }%
  228. %
  229. %%Macro which sets beginfigure and endfigure constructions
  230. %
  231. \def\Vauto@etab#1#2#3{%  {caption}{label}{prtype}%
  232.   \ifnum#3<3% 1 or 2 qualifies here
  233.     \begingroup \normalsize\rm\selectfont%
  234.       \ifnum\Vauto@NP=1 \caption{#1}\label{#2}%
  235.         \global\edef\Vauto@Fignum{\thefigure}%
  236.       \else \vspace{2em}%
  237.           \centerline{Figure \Vauto@Fignum: #1 (cont.)}%
  238.       \fi%
  239.     \endgroup%
  240.     \end{figure}% 
  241.     \def\Vauto@PrCnt{\Vauto@LPP}%
  242.     \ifnum#3=2 \setcounter{figure}{\Vauto@Fignum}\fi%
  243.   \fi%
  244.   \ifnum#3>1% 2 or 3 qualifies here
  245.     \begin{figure}[H]%
  246. %   \begin{figure}[\theVauto@Plx]%
  247.     \incr@macv{\Vauto@NP}{1}%
  248.     \gdef\Vauto@LinePage{0}%
  249.     \gdef\Vauto@PFlag{1}%
  250.   \fi%
  251.   \catcode`\^^M9%
  252. }%
  253. %
  254. %%%% Internal macro that does the work...
  255. \def\Vauto@sf#1#2#3{\begingroup%
  256.   \def\verbatim@start{\Vauto@etab{#2}{#3}{3}}%
  257.   \def\verbatim@finish{\Vauto@etab{#2}{#3}{1}}%
  258.   \def\verbatim@font{\Vauto@sfFont\selectfont}%
  259.   \gdef\Vauto@LineNo{0}%
  260.   \gdef\Vauto@LineLoop{0}%
  261.   \parskip=0pt%
  262.   \def\verbatim@processline{%
  263.     \edef\subz{\noexpand\ifsubstr{\the\verbatim@line}{Vzzlabel}{1}{0}}\subz%
  264.     \ifnum\Vauto@NotLabel=1%
  265.       \incr@macv{\Vauto@LineNo}{1}%
  266.       \incr@macv{\Vauto@LineLoop}{1}%
  267.       \gdef\Vauto@PFlag{1}%
  268.       \ifnum\Vauto@LineStart>0% we haven't reached the first line yet...
  269.         \gdef\Vauto@PFlag{0}%
  270.         \incr@macv{\Vauto@LineStart}{-1}%
  271.       \else%
  272.         \ifnum\Vauto@LineCount=0% we're out of the "printable" region
  273.           \gdef\Vauto@PFlag{0}%
  274.         \else%
  275.           \incr@macv{\Vauto@LineCount}{-1}% decrease the line count
  276.         \fi%
  277.       \fi%
  278.       % debugging...
  279.       %\typeout{Start: \theVauto@LineStart, Count: \theVauto@LineCount,
  280.       %  Print: \theVauto@PrintFlag, Loop: \theVauto@LineLoop,
  281.       %  Mod: \theVauto@LineMod}%
  282.       \ifnum\Vauto@PFlag=1%
  283.         \leavevmode%
  284.         \ifnum\Vauto@LineLoop=\Vauto@LineMod%
  285.         \llap{{\Vauto@sfLNF\selectfont \Vauto@LineNo}%
  286.             \ \hskip\@totalleftmargin}%
  287.           \gdef\Vauto@LineLoop{0}%
  288.           \else%
  289.           \llap{\phantom{\Vauto@sfLNF\selectfont 0}\ %
  290.                 \hskip\@totalleftmargin}%
  291.           \fi%
  292.         \the\verbatim@line\par%
  293.         \incr@macv{\Vauto@LinePage}{1}%
  294.       \else%
  295.         \ifnum\Vauto@LineLoop=\Vauto@LineMod%
  296.           \gdef\Vauto@LineLoop{0}%
  297.         \fi%
  298.       \fi%
  299.       \ifnum\Vauto@LinePage=\Vauto@PrCnt \Vauto@etab{#2}{#3}{2}\fi%
  300.     \fi% End of the loop printing non-labels
  301.   }%
  302.   \verbatiminput{#1} \endgroup}%
  303. %
  304. \def\Vauto@sfP#1#2#3#4#5{%
  305. \begingroup%
  306.   \gdef\Vauto@PrCnt{\Vauto@LPPa}%
  307.   \gdef\Vauto@NP{0}%    % Number of pages
  308.   \gdef\Vauto@LineMod{-1}%
  309.   \gdef\Vauto@LineStart{#1}%
  310.   \gdef\Vauto@LineCount{#2}%
  311.   \incr@macv{\Vauto@LineCount}{-\Vauto@LineStart}%
  312.   \incr@macv{\Vauto@LineCount}{1}%
  313.   \incr@macv{\Vauto@LineStart}{-1}%
  314.   \Vauto@sf{#3}{#4}{#5}%
  315.   \catcode`\^^M`\^^M%
  316. \endgroup%
  317. }%
  318. \def\Vauto@sfN[#1]#2#3#4#5#6{%
  319. \begingroup%
  320.   \gdef\Vauto@PrCnt{\Vauto@LPPa}%
  321.   \gdef\Vauto@NP{0}%    % Number of pages
  322.   \gdef\Vauto@LineMod{#1}%
  323.   \gdef\Vauto@LineStart{#2}%
  324.   \gdef\Vauto@LineCount{#3}%
  325.   \incr@macv{\Vauto@LineCount}{-\Vauto@LineStart}%
  326.   \incr@macv{\Vauto@LineCount}{1}%
  327.   \incr@macv{\Vauto@LineStart}{-1}%
  328.   \Vauto@sf{#4}{#5}{#6}%
  329.   \catcode`\^^M`\^^M%
  330. \endgroup%
  331. }%
  332. \def\VautoSubF{%
  333.   \@ifnextchar[{\Vauto@sfN}{\Vauto@sfP}%]
  334. }%
  335. \endinput%
  336. %%%% EOF
  337.